//
//  NetworkHandler.m
//  UI6_加载网络图片
//
//  Created by dlios on 15-5-1.
//  Copyright (c) 2015年 www.lanou3g.com 蓝鸥科技. All rights reserved.
//

#import "NetworkHandler.h"

@implementation NetworkHandler
+(void)requestWitURL:(NSString *)urlStr completion:(void (^)(id result))block
{
    // 封装
    // 把重复代码写一次之后反复调用
    
    // 封装的原因:
    // 1.简化代码 2.提高代码的扩展性/ 可重用性
    
    // 封装的标志
    // 可以复制粘贴 有重复的代码反复出现
    
    // 封装的方式
    // 1.方法封装
    // 在一个类中反复出现 只适用于当前 把重复代码写在一个方法中 反复使用
    // 2.类封装
    // 在多个类中反复出现 或者多个工程中都可以使用 把重复代码写在一个类中
    // 3.类目
    // 给一个已有的类扩展功能
    
    // 封装的要求:
    // 1.内存管理
    // 2.预先规划好返回值(期望的返回结果) 和参数(期望的返回参数) 设计好那些值是可以变化的 哪些值是不变的
    // 3.安全性 保证封装本身不存在问题
    // 4.扩展性 封装不是一次性的事
    
    // block异步GET网络请求封装
    // 1.获取网址urlStr
    // 汉字转码
    NSString *str = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    // 2.string->URl
    NSURL *url = [NSURL URLWithString:str];
    // URL->request
    // 参数1:url网址
    // 参数2:缓存机制
    // 参数3:响应时间限制
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
    // 4.建立连接
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        // 5.JSON解析
        id result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
        // 6.使用block回调 传递数据
        block (result);
    }];
}
@end
